/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.portfolio;
import java.net.URI;
import javax.ws.rs.DELETE;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.opengamma.DataNotFoundException;
import com.opengamma.id.ObjectId;
import com.opengamma.id.ObjectIdentifiable;
import com.opengamma.master.portfolio.ManageablePortfolioNode;
import com.opengamma.master.portfolio.PortfolioDocument;
/**
* RESTful resource for all positions in a node.
*/
@Path("/portfolios/{portfolioId}/nodes/{nodeId}/positions/{positionId}")
public class WebPortfolioNodePositionResource extends AbstractWebPortfolioResource {
/**
* Creates the resource.
* @param parent the parent resource, not null
*/
public WebPortfolioNodePositionResource(final AbstractWebPortfolioResource parent) {
super(parent);
}
//-------------------------------------------------------------------------
@DELETE
@Produces(MediaType.TEXT_HTML)
public Response deleteHTML() {
ObjectId positionId = ObjectId.parse(data().getUriPositionId());
PortfolioDocument doc = data().getPortfolio();
if (doc.isLatest()) {
ManageablePortfolioNode node = data().getNode();
if (node.getPositionIds().remove(positionId) == false) {
throw new DataNotFoundException("Position id not found: " + positionId);
}
doc = data().getPortfolioMaster().update(doc);
}
return Response.seeOther(WebPortfolioNodeResource.uri(data())).build();
}
@DELETE
@Produces(MediaType.APPLICATION_JSON)
public Response deleteJSON() {
ObjectId positionId = ObjectId.parse(data().getUriPositionId());
PortfolioDocument doc = data().getPortfolio();
if (doc.isLatest()) {
ManageablePortfolioNode node = data().getNode();
if (node.getPositionIds().remove(positionId) == false) {
throw new DataNotFoundException("Position id not found: " + positionId);
}
doc = data().getPortfolioMaster().update(doc);
}
return Response.ok().build();
}
//-------------------------------------------------------------------------
/**
* Builds a URI for this resource.
* @param data the data, not null
* @return the URI, not null
*/
public static URI uri(final WebPortfoliosData data) {
return uri(data, null);
}
/**
* Builds a URI for this resource.
* @param data the data, not null
* @param overridePositionId the override node id, null uses information from data
* @return the URI, not null
*/
public static URI uri(final WebPortfoliosData data, final ObjectIdentifiable overridePositionId) {
String portfolioId = data.getBestPortfolioUriId(null);
String nodeId = data.getBestNodeUriId(null);
String positionId = overridePositionId.getObjectId().toString();
return data.getUriInfo().getBaseUriBuilder().path(WebPortfolioNodePositionResource.class).build(portfolioId, nodeId, positionId);
}
}